#include <iostream>

using namespace std;
class Parent {
    public: 
        void vir_function1() {
            cout << "Parent vir_function1" << endl;
        }
        virtual void vir_function2() {
            cout << "Parent vir_function2" << endl;
        }

    private:
        int a;
        int b;    
};
class Child: public Parent {
    public: 
        virtual void vir_function1() {
            cout << "Child vir_function1" << endl;
        }
        virtual void vir_function2(int a) {
            cout << "Child vir_function2" << endl;
        }
};


int main(int argc, char const *argv[])
{
    Parent p;
    p.vir_function1();
    p.vir_function2(); 

    cout << "===================" << endl;

    Child child;
    //如果派生类的函数与基类的函数同名，但是参数相同， 但是基类的函数没有virtual 关键字。 此时的基类的函数被隐藏
    child.vir_function1(); // 隐藏了父类的函数
    // child.vir_function2(); 这里隐藏了父类的函数， 


    Parent *pr = &child; //这里需要区别覆盖
    pr->vir_function1();
    pr->vir_function2();
    return 0;
}
